WSL2에서 개발용 로컬 서버를 실행하고 윈도우에서 브라우저로 접속을 하면 안될 때가 있다. WSL2는 실행시 임의의 IP를 부여받기 떄문에 해당 IP로 윈도우 쪽에서 리다이렉팅이 필요하다. 원래는 자동으로 해줘야하는 기능이 맞지만 가끔 안되는 경우도 있고 만약 로컬 주소가 일반적으로 사용하는 localhost가 아닌 경우도 있는데, 윈도우 HOSTS 파일에 리다이렉팅을 추가해줌으로써 해결할 수 있다.
아래 스크립트는 이 블로그에서 가져왔고 하나의 문자열을 받던 것을 배열을 받도록 살짝 수정하였다.
# 사용할 주소 문자열을 넣는다.
$hostnames = @("wsl")
# find ip of eth0
$ifconfig = (wsl -- ip -4 addr show eth0)
$ipPattern = "((\d+\.?){4})"
$ip = ([regex]"inet $ipPattern").Match($ifconfig).Groups[1].Value
if (-not $ip) {
exit
}
Write-Host $ip
$hostsPath = "$env:windir/system32/drivers/etc/hosts"
$hosts = (Get-Content -Path $hostsPath -Raw -ErrorAction Ignore)
if ($null -eq $hosts) {
$hosts = ""
}
$hosts = $hosts.Trim()
foreach($hostname in $hostnames) {
# update or add wsl ip
$find = "$ipPattern\s+$hostname"
$entry = "$ip $hostname"
if ($hosts -match $find) {
$hosts = $hosts -replace $find, $entry
}
else {
$hosts = "$hosts`n$entry".Trim()
}
try {
$temp = "$hostsPath.new"
New-Item -Path $temp -ItemType File -Force | Out-Null
Set-Content -Path $temp $hosts
Move-Item -Path $temp -Destination $hostsPath -Force
}
catch {
Write-Error "cannot update wsl ip"
}
}
이 파워쉘 스크립트는 HOSTS파일 마지막에 WSL2 인스턴스의 IP주소와 호스트 이름을 삽입한다. 예를 들어 위의 스크립트를 지금 그대로 돌리면 123.123.123.123 wsl
이라는 내용이 호스트 파일에 추가된다. 후에 브라우저 주소에 wsl을 입력해서 로컬 서버로 연결이 가능하다.
이를 자동화 하기 위해서 작업 스케쥴러를 이용할 수 있다.
powershell.exe
를 입력하고 인자 입력칸에 -file /위/스크립트/위치
를 기입하고 작업 생성을 마친다.이벤트 뷰어 작업
폴더를 클릭하면 방금 생성한 작업이 보인다. 더블클릭하여 편집창을 열어준다.이제 WSL이 실행될 때 자동으로 위의 스크립트를 실행할 수 있다.